﻿<?xml version="1.0" encoding="utf-8"?><Articles><Article><ArticlesID>865</ArticlesID><Title>Nhập m&amp;#244;n ASP.NET 2.0 (phần 2)</Title><Body>&amp;lt;p&amp;gt;ASP.NET 2.0 l&amp;amp;agrave; class library để tạo c&amp;amp;aacute;c  Web application m&amp;amp;agrave; NET Framework 2.0 cung cấp. Trong phần nhập m&amp;amp;ocirc;n về  ASP.NET 2.0 ch&amp;amp;uacute;ng t&amp;amp;ocirc;i xin được giải th&amp;amp;iacute;ch về cấu tr&amp;amp;uacute;c của ASP.NET 2.0 v&amp;amp;agrave;  những điểm cần lưu &amp;amp;yacute;....&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;&amp;lt;a href=&amp;quot;http://dev.meotom.net/2010/3/24/Nhap-mon-ASP-NET-2-0-phan-1-360.htm&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;gt; Nhập m&amp;amp;ocirc;n ASP.NET 2.0  (phần 1)&amp;lt;/a&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;a href=&amp;quot;http://dev.meotom.net/2010/3/24/Nhap-mon-ASP-NET-2-0-phan-3-362.htm&amp;quot;&amp;gt;&amp;amp;gt;&amp;amp;gt; Nhập m&amp;amp;ocirc;n ASP.NET 2.0  (phần 3)&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;Cấu tr&amp;amp;uacute;c ASP.NET 2.0&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;&amp;amp;nbsp;ASP.NET 2.0 sẽ  cung cấp c&amp;amp;aacute;c cơ cấu để thực hiện phương ph&amp;amp;aacute;p ph&amp;amp;aacute;t triển tương tự Visual Basic, như l&amp;amp;agrave; cơ cấu sinh ra event từ postback, HTTP request, v&amp;amp;agrave; c&amp;amp;aacute;c control được biểu hiện bằng thẻ, hay cơ cấu maintain trạng th&amp;amp;aacute;i theo ViewState.&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;Hoạt động của Visual Basic Applciation&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;Trước  ti&amp;amp;ecirc;n, ch&amp;amp;uacute;ng ta c&amp;amp;ugrave;ng suy nghĩ về những hoạt động của Visual Basic Applciation. Theo như hiển thị dưới đ&amp;amp;acirc;y, th&amp;amp;igrave; trong Visual Basic Application form l&amp;amp;agrave; tất cả phần trung t&amp;amp;acirc;m.&amp;lt;/p&amp;gt;
&amp;lt;ol&amp;gt;
    &amp;lt;li&amp;gt;Tạo form rồi hiển thị.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Khi user thao t&amp;amp;aacute;c form th&amp;amp;igrave;  event handler được gọi ra.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Event handler thực hiện logic, set  peroperty của control, rồi load lại m&amp;amp;agrave;n h&amp;amp;igrave;nh.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Lặp lại 2-3.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Tạo  v&amp;amp;agrave; hiển thị form mới nếu cần.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Lặp lại 2-5.&amp;lt;/li&amp;gt;
&amp;lt;/ol&amp;gt;
&amp;lt;p&amp;gt;Nếu so s&amp;amp;aacute;nh với hoạt động của Web application th&amp;amp;igrave; chắc c&amp;amp;aacute;c bạn sẽ hiểu được sự kh&amp;amp;aacute;c biệt giữa ch&amp;amp;uacute;ng. Sau đ&amp;amp;acirc;y l&amp;amp;agrave; 3 điểm kh&amp;amp;aacute;c biệt cụ thể.&amp;lt;/p&amp;gt;
&amp;lt;ul&amp;gt;
    &amp;lt;li&amp;gt;Trong Visual Basic c&amp;amp;oacute; thể thao t&amp;amp;aacute;c nhiều lần với c&amp;amp;ugrave;ng 1  form.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Trong Visual Basic th&amp;amp;igrave; kh&amp;amp;ocirc;ng phải l&amp;amp;agrave; lần n&amp;amp;agrave;o cũng tạo ra  HTML mới m&amp;amp;agrave; chỉ thay đổi 1 form.&amp;lt;/li&amp;gt;
    &amp;lt;li&amp;gt;Visual Basic l&amp;amp;agrave; stateful.&amp;lt;/li&amp;gt;
&amp;lt;/ul&amp;gt;
&amp;lt;h3&amp;gt;Control  m&amp;amp;agrave; được hiển thị bằng thẻ&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;Web application v&amp;amp;agrave; Visual Basic kh&amp;amp;ocirc;ng  phải l&amp;amp;agrave; kh&amp;amp;aacute;c nhau ho&amp;amp;agrave;n to&amp;amp;agrave;n. Cả HTML sử dụng tr&amp;amp;ecirc;n Web application v&amp;amp;agrave; *.frm biểu thị form của Visual Basic đều c&amp;amp;oacute; điểm chung l&amp;amp;agrave; cả 2 đều l&amp;amp;agrave; cấu tr&amp;amp;uacute;c c&amp;amp;acirc;y (mặc d&amp;amp;ugrave; ho&amp;amp;agrave;n to&amp;amp;agrave;n kh&amp;amp;ocirc;ng c&amp;amp;oacute; điểm chung về mặt ngữ ph&amp;amp;aacute;p). C&amp;amp;oacute; form, trong đ&amp;amp;oacute; c&amp;amp;oacute; panel (trong HTML l&amp;amp;agrave; thẻ &amp;amp;lt;div&amp;amp;gt; v&amp;amp;agrave; thẻ &amp;amp;lt;table&amp;amp;gt;), c&amp;amp;oacute; text box, button. Tất cả những c&amp;amp;aacute;i n&amp;amp;agrave;y được gọi l&amp;amp;agrave; c&amp;amp;aacute;c control biểu thị phần GUI, v&amp;amp;igrave; thế n&amp;amp;oacute; sẽ c&amp;amp;oacute; cấu tr&amp;amp;uacute;c c&amp;amp;acirc;y, với h&amp;amp;igrave;nh thức như Composite pattern, ở chỗ gọi l&amp;amp;agrave; design pattern.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;V&amp;amp;igrave; thế n&amp;amp;ecirc;n trong ASP.NET c&amp;amp;oacute; nhiều control với h&amp;amp;igrave;nh thức giống HTMLthẻ trong HTML. Ch&amp;amp;uacute;ng t&amp;amp;ocirc;i xin được đưa ra source code cụ thể như sau.&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: xhtml;&amp;quot;&amp;gt;
&amp;amp;lt;form id=&amp;amp;quot;form1&amp;amp;quot; runat=&amp;amp;quot;server&amp;amp;quot;&amp;amp;gt;
    &amp;amp;lt;p&amp;amp;gt;
        HonoricTitle:
        &amp;amp;lt;asp:DropDownList ID=&amp;amp;quot;honorificTitleDropDownList&amp;amp;quot; runat=&amp;amp;quot;server&amp;amp;quot;&amp;amp;gt;
            &amp;amp;lt;asp:ListItem Text=&amp;amp;quot;Mr.&amp;amp;quot; Value=&amp;amp;quot;1&amp;amp;quot; /&amp;amp;gt;
            &amp;amp;lt;asp:ListItem Text=&amp;amp;quot;Mrs.&amp;amp;quot; Value=&amp;amp;quot;2&amp;amp;quot; /&amp;amp;gt;
            &amp;amp;lt;asp:ListItem Text=&amp;amp;quot;Miss&amp;amp;quot; Value=&amp;amp;quot;3&amp;amp;quot; /&amp;amp;gt;
        &amp;amp;lt;/asp:DropDownList&amp;amp;gt;
    &amp;amp;lt;/p&amp;amp;gt;
    &amp;amp;lt;p&amp;amp;gt;
        Name:
        &amp;amp;lt;input type=&amp;amp;quot;text&amp;amp;quot; name=&amp;amp;quot;nameTextBox&amp;amp;quot; runat=&amp;amp;quot;server&amp;amp;quot; /&amp;amp;gt;
    &amp;amp;lt;/p&amp;amp;gt;
    &amp;amp;lt;p&amp;amp;gt;
        &amp;amp;lt;asp:Button ID=&amp;amp;quot;sendDataButton&amp;amp;quot; Text=&amp;amp;quot;Send Data to Application Server&amp;amp;quot; runat=&amp;amp;quot;server&amp;amp;quot; /&amp;amp;gt;
    &amp;amp;lt;/p&amp;amp;gt;
&amp;amp;lt;/form&amp;amp;gt;

&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;Thẻ m&amp;amp;agrave; gi&amp;amp;aacute; trị của thuộc t&amp;amp;iacute;nh runat được set bằng &amp;amp;quot;server&amp;amp;quot; l&amp;amp;agrave; control của ASP.NET 2.0. Trong trường hợp t&amp;amp;ecirc;n thẻ bắt đầu bằng &amp;amp;quot;asp:&amp;amp;quot; th&amp;amp;igrave; sử dụng control c&amp;amp;oacute; t&amp;amp;ecirc;n giống với thẻ ở namespace của System.Web.UI.WebControls, c&amp;amp;aacute;c trường hợp kh&amp;amp;aacute;c th&amp;amp;igrave; sử dụng control c&amp;amp;oacute; t&amp;amp;ecirc;n giống với thẻ của HTML ở namespace của System.Web.UI.HtmlControls. Những control n&amp;amp;agrave;y sẽ sinh ra HTML ph&amp;amp;ugrave; hợp khi chạy th&amp;amp;ocirc;ng qua runtime của ASP.NET 2.0. V&amp;amp;iacute; dụ trong trường hợp &amp;amp;lt;asp:DropDownList&amp;amp;gt; th&amp;amp;igrave; sẽ sinh ra &amp;amp;lt;select&amp;amp;gt;.&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;Post back&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;V&amp;amp;igrave; những điểm giống  nhau đ&amp;amp;atilde; kết th&amp;amp;uacute;c bằng control biểu thị bằng thẻ n&amp;amp;ecirc;n b&amp;amp;acirc;y giờ ch&amp;amp;uacute;ng ta sẽ  đi s&amp;amp;acirc;u v&amp;amp;agrave;o những điểm kh&amp;amp;aacute;c biệt.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Điểm kh&amp;amp;aacute;c biệt m&amp;amp;agrave; ch&amp;amp;uacute;ng ta c&amp;amp;oacute; thể nghĩ ngay tới ch&amp;amp;iacute;nh l&amp;amp;agrave; nơi gửi request. Do trong Visual Basic th&amp;amp;igrave; c&amp;amp;oacute; thể thực hiện nhiều lần event handler trong những m&amp;amp;agrave;n h&amp;amp;igrave;nh giống nhau n&amp;amp;ecirc;n kh&amp;amp;ocirc;ng thể tiến h&amp;amp;agrave;nh gửi request tới m&amp;amp;agrave;n h&amp;amp;igrave;nh tiếp theo như ở Web application th&amp;amp;ocirc;ng thường. M&amp;amp;agrave; bắt buộc phải tự gửi lại cho ch&amp;amp;iacute;nh m&amp;amp;igrave;nh.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong ASP.NET 2.0 gọi việc gửi th&amp;amp;ocirc;ng tin request lại cho ch&amp;amp;iacute;nh m&amp;amp;igrave;nh được gọi l&amp;amp;agrave; postback. Về nguồn gốc t&amp;amp;ecirc;n postback nghĩa l&amp;amp;agrave; việc gửi th&amp;amp;ocirc;ng tin request trong Web application như đ&amp;amp;atilde; tr&amp;amp;igrave;nh b&amp;amp;agrave;y ch&amp;amp;iacute;nh l&amp;amp;agrave; protocol POST của HTTP, v&amp;amp;agrave; n&amp;amp;oacute; sẽ trả lại request đ&amp;amp;oacute; cho component đ&amp;amp;atilde; sinh ra HTML.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;C&amp;amp;aacute;ch l&amp;amp;agrave;m cụ thể để thực hiện post back?&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Phương ph&amp;amp;aacute;p thực hiện post back th&amp;amp;igrave; rất đơn giản, chỉ l&amp;amp;agrave; thao t&amp;amp;aacute;c đưa URL của ch&amp;amp;iacute;nh m&amp;amp;igrave;nh v&amp;amp;agrave;o thuộc t&amp;amp;iacute;nh action của thẻ &amp;amp;lt;form&amp;amp;gt; để hiển thị form tr&amp;amp;ecirc;n HTML. Nếu nh&amp;amp;igrave;n v&amp;amp;agrave;o source code của ASP.NET 2.0 như đ&amp;amp;atilde; đưa ra th&amp;amp;igrave; c&amp;amp;aacute;c bạn sẽ thấy l&amp;amp;agrave; trong &amp;amp;lt;form&amp;amp;gt; kh&amp;amp;ocirc;ng c&amp;amp;oacute; thuộc t&amp;amp;iacute;nh action. V&amp;amp;igrave; trong &amp;amp;lt;form&amp;amp;gt; c&amp;amp;oacute; runat=&amp;amp;quot;server&amp;amp;quot; n&amp;amp;ecirc;n n&amp;amp;oacute; ch&amp;amp;iacute;nh l&amp;amp;agrave; control của ASP.NET 2.0. Control &amp;amp;lt;form&amp;amp;gt; n&amp;amp;agrave;y sẽ tự động sinh ra thuộc t&amp;amp;iacute;nh action để trỏ v&amp;amp;agrave;o ch&amp;amp;iacute;nh m&amp;amp;igrave;nh khi tạo ra HTML, v&amp;amp;agrave; thực hiện postback.&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;Tạo  event từ HTTP request&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;Theo như đ&amp;amp;atilde; tr&amp;amp;igrave;nh b&amp;amp;agrave;y ở phần &amp;amp;quot;HTTP  l&amp;amp;agrave; g&amp;amp;igrave;?&amp;amp;quot; th&amp;amp;igrave; request m&amp;amp;agrave; gửi th&amp;amp;ocirc;ng tin lại cho ch&amp;amp;iacute;nh m&amp;amp;igrave;nh bằng postback  v&amp;amp;ocirc; c&amp;amp;ugrave;ng đơn giản.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Để tương ứng với Visual Basic, phải thực hiện chuyển request n&amp;amp;agrave;y th&amp;amp;agrave;nh 1 dạng event n&amp;amp;agrave;o đ&amp;amp;oacute;, v&amp;amp;agrave; cuối c&amp;amp;ugrave;ng c&amp;amp;aacute;c method như sendButton_Click(object source, EventArgs e) phải được gọi ra.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;C&amp;amp;aacute;ch l&amp;amp;agrave;m cụ thể để tạo event từ HTTP request?&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Những thao t&amp;amp;aacute;c kh&amp;amp;oacute; sẽ được thực hiện bởi JavaScript (cụ thể l&amp;amp;agrave; sẽ sinh ra h&amp;amp;agrave;m JavaScript c&amp;amp;oacute; t&amp;amp;ecirc;n __doPostBack) của client site chỉ được sinh ra trong trường hợp logic của runtime ASP.NET 2.0 sử dụng t&amp;amp;iacute;nh năng HTTP request, m&amp;amp;agrave; logic của runtime kh&amp;amp;ocirc;ng thể thực hiện được.&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;Maintain  trạng th&amp;amp;aacute;i theo ViewState&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;Nếu chỉ sử dụng HTTP một c&amp;amp;aacute;ch  th&amp;amp;ocirc;ng thường v&amp;amp;agrave; hiển thị ra th&amp;amp;igrave; việc sinh ra event từ HTTP như đ&amp;amp;atilde; tr&amp;amp;igrave;nh b&amp;amp;agrave;y ở tr&amp;amp;ecirc;n l&amp;amp;agrave; rất kh&amp;amp;oacute; khăn. Bởi v&amp;amp;igrave; HTTP l&amp;amp;agrave; stateless.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong HTTP giữa request trước v&amp;amp;agrave; request sau n&amp;amp;agrave;y kh&amp;amp;ocirc;ng c&amp;amp;oacute; quan hệ g&amp;amp;igrave;. Cho d&amp;amp;ugrave; c&amp;amp;oacute; request được gửi th&amp;amp;ocirc;ng tin từ Web browser giống nhau của c&amp;amp;ugrave;ng một computer th&amp;amp;igrave; n&amp;amp;oacute; cũng kh&amp;amp;ocirc;ng c&amp;amp;oacute; quan hệ g&amp;amp;igrave; cả. Hơn nữa thậm ch&amp;amp;iacute; l&amp;amp;agrave; việc tạo event của change series (v&amp;amp;iacute; dụ TextChanged) l&amp;amp;agrave; v&amp;amp;ocirc; c&amp;amp;ugrave;ng kh&amp;amp;oacute; khăn.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Ch&amp;amp;uacute;ng ta sẽ c&amp;amp;ugrave;ng đi v&amp;amp;agrave;o nội dung cụ thể hơn. Trong server site dựa theo HTTP request m&amp;amp;agrave; chỉ c&amp;amp;oacute; thể nhận th&amp;amp;ocirc;ng tin của input data, th&amp;amp;igrave; cho d&amp;amp;ugrave; hiểu được nội dung đ&amp;amp;atilde; input th&amp;amp;igrave; vẫn kh&amp;amp;ocirc;ng hiểu được nội dung đ&amp;amp;atilde; hiển thị trước đ&amp;amp;oacute;.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Nếu l&amp;amp;agrave; stateful, c&amp;amp;oacute; thể hiểu được lần trước đ&amp;amp;atilde; trả response như thế n&amp;amp;agrave;o, thế nhưng tiếc l&amp;amp;agrave; HTTP lại l&amp;amp;agrave; stateless. V&amp;amp;igrave; thế, cho d&amp;amp;ugrave; hiều được input l&amp;amp;agrave; &amp;amp;quot;XX&amp;amp;quot; lần n&amp;amp;agrave;y th&amp;amp;igrave; vẫn kh&amp;amp;ocirc;ng hiểu được trước c&amp;amp;aacute;i đ&amp;amp;oacute; l&amp;amp;agrave; &amp;amp;quot;YY&amp;amp;quot; hay l&amp;amp;agrave; &amp;amp;quot;ZZ&amp;amp;quot;. V&amp;amp;igrave; thế n&amp;amp;ecirc;n từ HTTP request th&amp;amp;ocirc;ng thường kh&amp;amp;ocirc;ng thể sinh ra event của change series.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;Trong HTTP, rất kh&amp;amp;oacute; để maintain property of control&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Ch&amp;amp;uacute;ng ta h&amp;amp;atilde;y c&amp;amp;ugrave;ng nhau suy nghĩ s&amp;amp;acirc;u hơn n&amp;amp;agrave;o. Lấy v&amp;amp;iacute; dụ về label l&amp;amp;agrave; control của Visual Basic. Label control l&amp;amp;agrave; control sẽ hiển thị l&amp;amp;ecirc;n m&amp;amp;agrave;n h&amp;amp;igrave;nh c&amp;amp;aacute;c character đ&amp;amp;atilde; được set bởi Text property, v&amp;amp;agrave; n&amp;amp;oacute; được biểu hiện bằng sử dụng thẻ &amp;amp;lt;span&amp;amp;gt; của HTML. N&amp;amp;oacute; kh&amp;amp;ocirc;ng phải l&amp;amp;agrave; thẻ &amp;amp;lt;input&amp;amp;gt;. V&amp;amp;igrave; thế n&amp;amp;ecirc;n trong HTTP request kh&amp;amp;ocirc;ng bao gồm data của label control.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Hơn nữa, như đ&amp;amp;atilde; tr&amp;amp;igrave;nh b&amp;amp;agrave;y ở phần trước, HTTP l&amp;amp;agrave; stateless, n&amp;amp;ecirc;n kh&amp;amp;ocirc;ng biết được ở lần response trước n&amp;amp;oacute; trả lại HTML như thế n&amp;amp;agrave;o? V&amp;amp;igrave; thế, trừ khi c&amp;amp;oacute; c&amp;amp;aacute;c solution đặc biệt, c&amp;amp;ograve;n kh&amp;amp;ocirc;ng th&amp;amp;igrave; sẽ kh&amp;amp;ocirc;ng thể hiển thị được g&amp;amp;igrave; tr&amp;amp;ecirc;n Web browser cả trong response trước v&amp;amp;agrave; sau n&amp;amp;agrave;y.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Nếu như vậy th&amp;amp;igrave; ch&amp;amp;uacute;ng ta vẫn chưa thể thực hiện tương đương với Visual Basic. Do vậy bằng c&amp;amp;aacute;ch n&amp;amp;agrave;o đấy ch&amp;amp;uacute;ng ta buộc phải giữ lại trạng th&amp;amp;aacute;i trước đ&amp;amp;oacute; v&amp;amp;agrave; trong request phải bao gồm cả th&amp;amp;ocirc;ng tin li&amp;amp;ecirc;n quan đến trạng th&amp;amp;aacute;i trước đ&amp;amp;oacute;.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;C&amp;amp;aacute;ch l&amp;amp;agrave;m cụ thể để giữ trạng th&amp;amp;aacute;i theo ViewState？&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Thật may, nếu sử dụng thẻ &amp;amp;lt;input type=&amp;amp;rdquo;hidden&amp;amp;rdquo;&amp;amp;gt; th&amp;amp;igrave; việc add th&amp;amp;ecirc;m th&amp;amp;ocirc;ng tin tới cho request rất đơn giản. Gọi l&amp;amp;agrave; thẻ &amp;amp;lt;input type=&amp;amp;rdquo;hidden&amp;amp;rdquo;&amp;amp;gt; l&amp;amp;agrave; bởi v&amp;amp;igrave; n&amp;amp;oacute; l&amp;amp;agrave; input item kh&amp;amp;ocirc;ng được hiển thị l&amp;amp;ecirc;n m&amp;amp;agrave;n h&amp;amp;igrave;nh theo đ&amp;amp;uacute;ng như t&amp;amp;ecirc;n gọi của n&amp;amp;oacute;, m&amp;amp;agrave; sẽ gửi c&amp;amp;aacute;c gi&amp;amp;aacute; trị đ&amp;amp;atilde; được chỉ định bằng thuộc t&amp;amp;iacute;nh value.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong ASP.NET 2.0, sử dụng thẻ &amp;amp;lt;input type=&amp;amp;rdquo;hidden&amp;amp;rdquo;&amp;amp;gt; th&amp;amp;igrave; c&amp;amp;oacute; thể giữ được trạng th&amp;amp;aacute;i trước đ&amp;amp;oacute;. Cụ thể l&amp;amp;agrave; sẽ tạo ra thẻ &amp;amp;lt;input type=&amp;amp;rdquo;hidden&amp;amp;rdquo;&amp;amp;gt; m&amp;amp;agrave; thuộc t&amp;amp;iacute;nh name được set trong &amp;amp;quot;__VIEWSTATE&amp;amp;quot;, để giữ lại trạng th&amp;amp;aacute;i control chứa trong form v&amp;amp;agrave;o trong thẻ đ&amp;amp;oacute;. Trong ASP.NET 2.0 người ta gọi t&amp;amp;iacute;nh năng lưu giữ lại trạng th&amp;amp;aacute;i bằng phương thức n&amp;amp;agrave;y l&amp;amp;agrave; ViewState.&amp;lt;/p&amp;gt;
&amp;lt;h3&amp;gt;Hoạt  động của ASP.NET 2.0&amp;lt;/h3&amp;gt;
&amp;lt;p&amp;gt;Ch&amp;amp;uacute;ng ta sẽ t&amp;amp;oacute;m tắt lại những phần tr&amp;amp;ecirc;n v&amp;amp;agrave;  tr&amp;amp;igrave;nh b&amp;amp;agrave;y về hoạt động của ASP.NET 2.0. Phần tr&amp;amp;igrave;nh b&amp;amp;agrave;y sẽ dựa tr&amp;amp;ecirc;n việc ph&amp;amp;acirc;n chia th&amp;amp;agrave;nh request lần đầu v&amp;amp;agrave; request từ lần 2 trở đi.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;Trường hợp request lần đầu&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Nếu ASP.NET 2.0 nhận request HTTP từ Web browser, th&amp;amp;igrave; n&amp;amp;oacute; sẽ tạo ra form instance. Form instance sẽ tạo ra c&amp;amp;acirc;y của control instance ở b&amp;amp;ecirc;n trong đ&amp;amp;oacute;.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Sau đ&amp;amp;oacute;, cho khởi động Load event, v&amp;amp;agrave; gọi ra event handler m&amp;amp;agrave; ch&amp;amp;uacute;ng ta sẽ tạo. Trong event handler, set property của control trong control c&amp;amp;acirc;y để kiểm so&amp;amp;aacute;t việc hiển thị m&amp;amp;agrave;n h&amp;amp;igrave;nh.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Cuối c&amp;amp;ugrave;ng, Form sẽ sinh ra HTML v&amp;amp;agrave; trả về Web browser. Xử l&amp;amp;iacute; generate HTML được chuyển đến control, control sẽ sinh ra HTML ph&amp;amp;ugrave; hợp với property của ch&amp;amp;iacute;nh m&amp;amp;igrave;nh. Hơn nữa, c&amp;amp;oacute; thể lưu giữ trạng th&amp;amp;aacute;i của control v&amp;amp;agrave;o trong ViewState khi cần, v&amp;amp;agrave; thẻ &amp;amp;lt;input type=&amp;amp;rdquo;hidden&amp;amp;rdquo;&amp;amp;gt; sẽ được tạo ra.&amp;lt;/p&amp;gt;
&amp;lt;h4&amp;gt;Trường hợp request từ lần 2 trở đi&amp;lt;/h4&amp;gt;
&amp;lt;p&amp;gt;Nội dung cho đến phần nhận request HTTP, tạo c&amp;amp;acirc;y của form  instance v&amp;amp;agrave; control instance th&amp;amp;igrave; giống với request đầu ti&amp;amp;ecirc;n.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Trong postback request bao gồm ViewState tạo trong response trước đ&amp;amp;oacute;, v&amp;amp;igrave; thế sẽ set control property giống như khi trả về response lần trước dựa v&amp;amp;agrave;o ViewState đ&amp;amp;oacute;.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Sau đ&amp;amp;oacute;, so s&amp;amp;aacute;nh trạng th&amp;amp;aacute;i giữa HTTP request v&amp;amp;agrave; trạng th&amp;amp;aacute;i control hiện tại (được phục hồi nhờ ViewState), th&amp;amp;igrave; ch&amp;amp;uacute;ng ta sẽ khởi động event th&amp;amp;iacute;ch hợp. Do form được load tương tự với trường hợp request đầu ti&amp;amp;ecirc;n, n&amp;amp;ecirc;n đầu ti&amp;amp;ecirc;n, load event nếu gi&amp;amp;aacute; trị được input v&amp;amp;agrave;o textbox kh&amp;amp;aacute;c với ViewState, v&amp;amp;agrave; nếu TextChanged event, button được click, th&amp;amp;igrave; ch&amp;amp;uacute;ng ta cảm gi&amp;amp;aacute;c như l&amp;amp;agrave; Clicked event.&amp;lt;/p&amp;gt;
&amp;lt;p&amp;gt;Đương nhi&amp;amp;ecirc;n, với c&amp;amp;aacute;c event handler của load event m&amp;amp;agrave; cả request đầu ti&amp;amp;ecirc;n, cả postback (Page_Load() method) đều được gọi ra v&amp;amp;ocirc; điều kiện th&amp;amp;igrave; sử dụng IsPostBack property biểu thị l&amp;amp;agrave; c&amp;amp;oacute; postback hay kh&amp;amp;ocirc;ng, để thay thế nội dung xử l&amp;amp;iacute;. H&amp;amp;atilde;y lấy v&amp;amp;iacute; dụ cụ thể. Th&amp;amp;ocirc;ng thường Page_Load() method sẽ như sau.&amp;lt;/p&amp;gt;
&amp;lt;pre title=&amp;quot;code&amp;quot; class=&amp;quot;brush: csharp;&amp;quot;&amp;gt;
private void Page_Load(object sender, EventArgs e)
{
    //  Sử dụng IsPostBack property, ph&amp;amp;aacute;n đo&amp;amp;aacute;n xem c&amp;amp;oacute; postback hay kh&amp;amp;ocirc;ng?
    if (!IsPostBack)
    {
        //  ở đ&amp;amp;acirc;y sẽ m&amp;amp;ocirc; tả xử l&amp;amp;iacute; khởi tạo.
    }
        
    //  Ở đ&amp;amp;acirc;y sẽ m&amp;amp;ocirc; tả xử l&amp;amp;iacute; chung trong tất cả event.
}

&amp;lt;/pre&amp;gt;
&amp;lt;p&amp;gt;C&amp;amp;aacute;c request sau giống với request đầu ti&amp;amp;ecirc;n. Control sẽ tạo ra  HTML, v&amp;amp;agrave; ViewState lưu giữ trạng th&amp;amp;aacute;i sẽ được sinh ra.&amp;lt;/p&amp;gt;
&amp;lt;p align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;strong&amp;gt;Theo -&amp;lt;/strong&amp;gt; &amp;lt;span style=&amp;quot;font-weight: bold;&amp;quot;&amp;gt;[Usol VN] &amp;lt;/span&amp;gt;&amp;lt;/p&amp;gt;</Body><CommentEnabled>True</CommentEnabled><ViewCount>0</ViewCount><ReleaseDate>4/7/2010 7:44:20 AM</ReleaseDate><TotalComment>0</TotalComment><IsMedia>False</IsMedia><IsPicture>False</IsPicture><IsVote>True</IsVote><ArticlePassword /><PostVisible>0</PostVisible><ArticlePath>/2010/3/24/Nhap-mon-ASP-NET-2-0-phan-2-361</ArticlePath><Approved>True</Approved><ImagePath /><CategoryId>26</CategoryId><ArrayCatID>26|25</ArrayCatID></Article></Articles>